#ifndef __ListaSimple_h__
   #define __ListaSimple_h__
   #if !defined(NULL)
      #define NULL 0
   #endif
   #if !defined(FALSE)
      #define FALSE 0
   #endif
   #if !defined(TRUE)
      #define TRUE 1
   #endif
   typedef enum
   {
      LS_PRIMERO,
      LS_SIGUIENTE,
      LS_ANTERIOR
   } TMovimiento_Ls;
   typedef struct TNodoSimple
   {
      void* Elem;
      struct TNodoSimple *Siguiente;
   } TNodoSimple;
   typedef struct
   {
      TNodoSimple *Primero, *Corriente;
      int TamanioDato;
   } TListaSimple;
   /* ls_Crear
   Pre: Ls no fue creada.
   Post: Ls creada y vacía */
   void ls_Crear(TListaSimple *pLs, int TamanioDato);
   /* ls_Vaciar
   Pre: Ls creada.
   Post: Ls vacía.*/
   void ls_Vaciar(TListaSimple *pLs);
   /* ls_Vacia
   Pre: Ls creada.
   Post: Si Ls tiene elementos devuelve FALSE sino TRUE.*/
   int ls_Vacia(TListaSimple Ls);
   /* ls_ElemCorriente
   Pre: Ls creada y no vacía.
   Post: Se devuelve en E el elemento corriente de la lista.*/
   void ls_ElemCorriente(TListaSimple Ls, void* pE);
   /* ls_ModifCorriente
   Pre: Ls creada y no vacía.
   Post: El contenido del elemento actual quedo actualizado con E. */
   void ls_ModifCorriente(TListaSimple *pLs, void* pE);
   /* ls_MoverCorriente
   Pre: Ls creada y no vacía.
   Post: Si Ls está vacía, devuelve FALSE. Sino:
   Si M = LS_PRIMERO, el nuevo elemento corriente es el primero. Devuelve TRUE
   Si M = LS_SIGUIENTE, el nuevo elemento corriente es el siguiente al
   anterior. Si estaba en el último elemento, devuelve FALSE, sino TRUE.
   Si M = LS_ANTERIOR, devuelve FALSE. */
   int ls_MoverCorriente(TListaSimple *pLs, TMovimiento_Ls M);
   /* ls_BorrarCorriente
   Pre: Ls creada y no vacía.
   Post: Se eliminó el elemento corriente, El nuevo elemento es el siguiente o
   el anterior si el corriente era el último elemento.*/
   void ls_BorrarCorriente(TListaSimple *pLs);
   /* ls_Insertar
   Pre: Ls creada.
   Post: E se agregó a la lista y es el actual elemento corriente.
   Si M=LS_PRIMERO: se insertó como primero de la lista.
   Si M=LS_SIGUIENTE: se insertó después del elemento corriente.
   Si M=LS_ANTERIOR: se insertó antes del elemento corriente.
   Si pudo insertar el elemento devuelve TRUE, sino FALSE.*/
   int ls_Insertar(TListaSimple *pLs, TMovimiento_Ls M, void* E);
#endif

